// es5 数组遍历方式
/**
 * for
 * forEach
 * map
 * filter
 * some
 * every
 * reduce
 * for in
 */
let arr = [1,2,3,4,2,3]
/* 
for(let i = 0; i < arr.length; i++){
  console.log(arr[i])
} */

arr.forEach(function(elem, index, array){
  console.log(elem, index, array)
})

// 返回新数组 不改变原有数组
let result = arr.map(function(value) {
  value += 1
  return value
})
console.log(result)

let res = arr.filter(function(value) {
  return value % 2 == 0
})
console.log(res)

// 检查一个条件
let bool = arr.some(function(value) {
  return value == 4
})

console.log(bool)

// 检查每一个条件都符合
let bool2 = arr.every(function(value) {
  return value > 0
})

console.log(bool2)


/**
 * reduce
 * 第二个参数表示 累加初始值
 * 累加
 */
let sum = arr.reduce(function(prev, cur, index, arr){
  return prev + cur
}, 0)
console.log(sum)

// 最大值
let max = arr.reduce(function(prev, cur){
  // return prev > cur ? prev : cur
  return Math.max(prev,cur)
}, 0)
console.log(max)

// 去重
let newArr = arr.reduce(function(prev, cur) {
  prev.indexOf(cur) == -1 && prev.push(cur)
  return prev
}, [])
console.log(newArr)

// for in
Array.prototype.foo = function(){console.log('会遍历这个函数')}
for(let index in arr) {
  console.log(index, arr[index])
}

/**
 * es6 遍历数组方式
 * find      : 第一个通过测试元素
 * findIndex ：第一个通过元素的索引
 * for of
 * values()
 * keys()
 * entries()
 */
let f1 = arr.find(function(val){
  return val == 2
})
console.log(f1)

let f2 = arr.findIndex(function(val){
  return val == 2
})
console.log(f2)

for (let item of arr) {
  console.log(item)
}

for (let item of arr.keys()) {
  console.log(item)
}

for (let [index, item] of arr.entries()) {
  console.log(index,item)
}

